#ifndef _M_SESSION_H_
#define _M_SESSION_H_

#include<iostream>
#include<unordered_map>
using namespace std;

namespace im{
    class SessionManager{
    private:
        uint64_t _next_id;
        mutex _mutex;//保证id的唯一性
        unordered_map<uint64_t,Json::Value> _ss;
    public:
        SessionManager():_next_id(1)
        {}
        //为登录成功的用户新增会话
        uint64_t insert(const Json::Value &user)
        {
            unique_lock<mutex> lock(_mutex);//加锁，保证原子性
            int ssid=_next_id;
            _ss.insert(make_pair(_next_id,user));
            _next_id++;
            return ssid;
        }
        bool get_session_user(uint64_t ssid,Json::Value *user)//获取用户信息
        {
            auto it=_ss.find(ssid);//从map中找id
            if(it==_ss.end())
            {
                return false;
            }
            *user=it->second;//找到了，直接指向用户信息
            return true;
        }
        bool exists(uint64_t ssid)
        {
            auto it=_ss.find(ssid);
            if(it==_ss.end())
            {
                return false;
            }
            return true;
        }
        void remove(uint64_t ssid)//移除
        {
            _ss.erase(ssid);
        }
    };
}

#endif